#!/bin/bash
shell_ver='1.0820.1019'
weixin="liu1666867051"
phone='19175090328'
update_info='
1、修正统信平台QAX浏览器检测
PS：遇到问题请及时反馈,每次更新之后都要手动检查一次进行对比,避免返工\n'
# 用于检查相关软件是否安装正确
##定义字体效果
#红色背景
red_bg='\e[41;33;1m'
#红色字体
red_zt='\e[1;31m'
#绿色背景
green_bg='\033[0;32;1m'
#绿色字体
green_zt='\e[1;32m'
#关闭效果
end='\033[0m'
#字体闪烁
ss='\033[05m'
#消隐
sy='\33[08m'
print_update(){
    echo -e "${red_zt}当前版本更新信息${end}"
    echo -e "${green_bg}${update_info}${end}"
}
print_update
ver_check(){
    if [[ -f '/bin/curl' ]];then
        curl -s baidu.com > /dev/null
        if [[ $? == 0 ]];then
            echo -e "${red_zt}正在检测版本...${end}"
            curl -s https://gitee.com/faith01238/tools/releases  | grep 插件检测  | grep tar | awk -F '_blank' '{print $2}'  | sed 's#</a>##g'  | sed -n 1p | awk -F 'V' '{print $2}' > d
            new_ver=$(sed 's#\.##g' d)
            local_ver=$(echo $shell_ver | sed 's#\.##g')
            new_vers=$(cat d)
            echo -e "${red_zt}当前版本: ${end} ${green_zt} $shell_ver ${end}"
            echo -e "${red_zt}最新版本: ${end} ${green_zt} $new_vers ${end}"
            if [[ $local_ver -lt $new_ver ]];then
                echo -e "${red_zt}当前版本过低,请在脚本执行末尾信息打开下载地址下载最新版${end}"
                echo -e "${red_zt}脚本更新下载地址:${end} ${green_zt}https://gitee.com/faith01238/tools/releases${end}"
                exit 1
            fi
        else
            echo -e "${red_zt}跳过脚本版本检测...${end}"
        fi
    fi
}

##常用语句定义区
#主要用于步骤开始前的信息展现
Entering(){
	echo -e "${green_bg}正在进入...${end}\n${red_zt}${1}...${end}" | tee -a $log_file
}
#红色字体+绿色字体
red_z_green_z_info(){
	echo -e "${red_zt}${1}:${end}${green_zt}${2}${end}" | tee -a $log_file
}
#检测是否输入
input_check(){
    #1参未需要设置的变量值[ $DB_PASS ]
    #2参为这个参数的备注信息[例如:数据库的root密码]
    #3参为一个随机/默认值,例如[ 000000 ]
    #4参为这个变量名,例如 [ DB_PASS ]
    if [[ -z "$1" ]];then
        echo -e "${red_zt}检测到${2}没有输入，已使用默认值[ ${3} ]${end}"
        eval `echo "$4=$3"`
    else
        eval `echo "$4=$1"`
    fi
}
#绿色字体
green_zt(){
	echo -e "${green_zt}${1}${end}"  | tee -a $log_file
}
#红色字体+绿色字体
red_z_green_z(){
	echo -e "${red_zt}${1}${end}${green_zt}${2}${end}${green_zt}${3}${end}"  | tee -a $log_file
}

red_z(){
	echo -e "${red_zt}${1}${end}"  | tee -a $log_file
}
#红色背景
red_bg(){
	echo -e "${red_bg}${1}${end}"  | tee -a $log_file
}

#红色字体+红色背景
red_zt_bg(){
	echo -e "${red_zt}${1}${end}${red_bg}${2}${end}"  | tee -a $log_file
}
#输入函数
input(){
	echo -e "${red_zt}${1}${end}"
	read $2
}
check_status(){
    if [[ $? == 0 ]];then
        red_z_green_z "$1" "成功" 
    else
        red_zt_bg "$1" "失败"
    fi
}
red_z_green_z "当前脚本版本:" ${shell_ver}
ver_check
#红色字体
service_status(){
    # $1 服务关键词，例如:wlh
    # $2 服务数量,默认:1
    # $3 服务的备注名称，例如:隐写系统
    status=$(systemctl -all | grep $1 | grep running | wc -l)
    if [[ $status == "$2" ]];then
        red_z_green_z_info "${3}启动状态" "已启动" 
    else
        red_zt_bg "${3}启动状态:" "未启动" 
    fi
}
service_check(){
    # $1 包名关键词
    # $2 软件中文名
    # $3 正确版本号
    service=$(dpkg -l | grep "$1" )
    if [[ -n $service ]];then
        status=0
        ver=$(echo "$service" | awk '{print $3}')
        red_z_green_z "${2}安装:" "已安装" 
        if [[ -n $3 ]];then
            if [[ -n $ver ]];then
                red_z_green_z "${2}当前版本:" $ver
                if [[ $ver == $3 ]];then
                    red_z_green_z "${2}版本检查:" "正确"
                else
                    red_zt_bg  "${2}版本检查:" "不正确"
                fi
            else
                red_zt_bg "${2}版本:" '查询失败'
            fi
        else
            red_z_green_z_info "${1}版本检测" '跳过'
        fi
    else
        red_zt_bg "${2}安装:" "未安装"
    fi
}

if [[ -n $2 ]];then
    sn=$2
fi
name_txt='name.txt'
if [[ -z $1  ]];then
    red_z_green_z '未检测到单位名称传入，将通过检测文件进行设置' $name_txt
    if [[ -f $name_txt ]];then
        dir=$(cat $name_txt)
        if [[ -z $dir ]];then
            red_bg "在文件[ name.txt ]中未检测到单位名称,请先输入单位名称保存(只能输入一个)"
            exit 1
        fi
    else
        red_zt_bg "未检测到文件" $name_txt
        exit 1
    fi
        
else
    dir="$1"
fi


arch=$(uname -m)
os_type=$(grep ^ID /etc/os-release | sed 's/ID=//' | sed -n 1p)
work_dir=$(pwd)

# if [[ $os_type == 'uos' ]];then
#     if [[ ${waring_uos} == '1' ]];then
#         red_bg "请先手动检查一次然后与脚本结果进行一一对比确定没问题再继续开展工作(此提示在同一个平台仅出现一次)"
#         sed -i 's/waring_uos=.*/waring_uos=0/' $0
#         exit 0
#     fi
# else
#     if [[ ${arch} == 'mips64' ]];then
#         if [[ $waring_kylin_mips == 1 ]];then
#             red_bg "请先手动检查一次然后与脚本结果进行一一对比确定没问题再继续开展工作(此提示在同一个平台仅出现一次)"
#             sed -i 's/waring_kylin_mips=.*/waring_kylin_mips=0/' $0
#             exit 0
#         fi
#     else
#         if [[ ${waring_kylin_arm} == '1' ]];then
#             red_bg "请先手动检查一次然后与脚本结果进行一一对比确定没问题再继续开展工作(此提示在同一个平台仅出现一次)"
#             sed -i 's/waring_kylin_arm=.*/waring_kylin_arm=0/' $0
#             exit 0
#         fi
#     fi
# fi

#获取SN信息
get_sn(){
    if [[ -z $sn ]];then
        if [[ "$os_type" == "uos" ]];then
            if [[ -e '/etc/sninfo' ]];then
                sn=`cat /etc/sninfo`
                check_status "查询SN"
            else
                red_zt_bg 'SN查询:' '找不到文件: /etc/sninfo'
            fi
            uos_ver=$(grep ^Min /etc/os-version | awk -F '=' '{print $2}')
        elif [[ "$os_type" == "kylin" ]];then
            if [[ $UID == 0 ]];then
                green_zt '检测当前用户已是最高权限,跳过密码输入'
                sn=$(sudo dmidecode -t system | grep Serial | awk '{print $3}')
            else
                input "请输入当前系统密码,直接回车将使用默认密码:" passwds
                if [[ -z ${passwds} ]];then
                    password='Gxxc@123'
                else
                    password=${passwds}
                fi
                echo ${password} | sudo -S echo '权限检验中...'
                if [[ $? -eq 0 ]];then
                    green_zt "权限校验成功"
                    sn=$(echo "$password" | sudo dmidecode -t system | grep Serial | awk '{print $3}')
                else
                    red_bg "权限校验失败,部分操作可能失败"
                fi
            fi
        else
            red_bg '系统类型判断失败'
        fi
    else
        red_z_green_z_info '已手动设置SN' "${sn}"
    fi

    if [[ -z $sn ]];then
        red_z_green_z_info "主机SN查询" "失败"
        sn='检测结果'
    else
        sn=$(echo $sn | sed 's@#@@' | sed 's# ##' )
        red_z_green_z_info '当前SN' "${sn}"
    fi
    log_file="${sn}.txt"
    copy_file="$(echo $dir | sed 's#/##' )"
    if [[ -z $copy_file ]];then
        copy_file=${1}_${log_file}
    else
        copy_file="${copy_file}/${log_file}"
    fi
    if [[ -f $log_file ]];then
        rm -f "$log_file"
        red_z_green_z_info '删除文件：' "${log_file}"
    fi
    if [[ -f $copy_file ]];then
        red_zt_bg "文件已存在,如需继续请先删除或改名" "是否删除[y/n]-->[ ${copy_file} ]"
        read rm_file
        if [[ $rm_file == 'y' ]];then
            red_z_green_z_info "删除文件:" "$log_file"
            rm -f "$copy_file"
        else
            red_bg "请修改该文件名: [ $copy_file ]"
            exit 1
        fi
    fi
    touch "${log_file}"
    if [[ $? == 0 ]];then
        echo -e "文件创建成功: ${log_file}"
    else
        log_file="${1}_检测结果.txt"
        touch "${log_file}"
        check_status "文件创建 [ ${log_file} ]--->"
    fi
    CP_FILE=/home/gxxc/${log_file}
    if [[ ! -d $CP_FILE ]];then
        CP_FILE=/home/$USER/${log_file}
    fi
    check_status "文件创建 [$log_file]-->" 
    red_z_green_z "当前主机记录文件:" "${log_file}"
    red_z_green_z_info "设置当前主机检测结果U盘存档文件" "${copy_file}"
    red_z_green_z_info "设置当前主机检测结果客户存档文件" "$CP_FILE"
}
info(){
    # 设置标准版本
    if [[ $os_type == 'kylin' ]];then
        
        wlh_yxsyclient_pac='wlh-yxsyclient' #万里红隐写溯源包名
        wlh_yxsyclient_ver_file='/opt/MJBZGL/XXYC/WLH/CLIENT/ver' #万里红隐写溯源版本配置文件
        # wlh_yxsyclient_log_file='/opt/MJBZGL/XXYC/WLH/CLIENT/log*/*.INFO' #万里红隐写溯源日志文件
        wlh_yxsyclient_info_file='/opt/MJBZGL/XXYC/WLH/CLIENT/host.ini' #万里红隐写溯源域名配置文件
        
        slclient_pac='slclient' #文档安全管理系统包名

        com_360_browser_pac='360安全浏览器' #360安全浏览器包名
        com_360_browser_ver='10.4.1006.26-1' #360安全浏览器版本

        com_qaxbrowser_pac='qaxbrowser-safe-stable' #奇安信浏览器包名
        com_qaxbrowser_ver='1.0.31523.2-1' #奇安信可信浏览器版本
        ofdplugin_ver='4.4.1A1.0' #电子签章

        suwellread_pac='suwell' #数科网维阅读器包名
        suwe_ver='3.0.21.0714-1' #数科阅读器版本

        

        if [[ $arch == 'mips64' ]];then
            foxitofficesuite_ver='8.0.4.210716GN.87bb0b4' #福昕阅读器
            slclient_ver='2.0.5.1' #文档安全管理系统
            topdesk_ver='3.0-0.0.1351.210429.ky10' #主机审计
            wlh_yxsyclient_ver_file='/opt/MJBZGL/XXYC/WLH/CLIENT/ver' #万里红隐写溯源版本配置文件
            updater_ver='1.0.0-2021.07.15' #运维保障系统版本
            certaide_ver='1.2.0.001' # BJCA客户端版本
        else

            foxitofficesuite_ver='8.0.4.210715GN.87bb0b4' #福昕阅读器
            slclient_ver='2.0.4' #文档安全管理系统版本
            topdesk_ver='3.0-0.0.1357.210506.ky10' #主机审计
            certaide_ver='1.2.0.001' # BJCA客户端版本
            updater_ver='1.0.0-2021.06.30' #运维保障系统版本
        fi
    else
        foxitofficesuite_ver='8.0.4.210716GW.87bb0b4' #福昕阅读器
        suwe_ver='3.0.21.0714-1' #数科阅读器
        ofdplugin_ver='4.4.0A1.0' #电子签章
        certaide_ver='1.2.0.001' # BJCA客户端版本
        topdesk_ver='3.0-0.0.1517.210608.uos20' #主机审计
        updater_ver='1.0.0-2021.06.30' #运维保障系统版本
        wlh_yxsyclient_pac='com.superred.wlhxxyc' #万里红隐写溯源包名


        wlh_yxsyclient_ver_file='/opt/apps/com.superred.wlhxxyc/files/ver' #万里红隐写溯源版本配置文件
        # wlh_yxsyclient_log_file='/opt/apps/com.superred.wlhxxyc/files/log*/*.INFO' #万里红隐写溯源日志文件
        wlh_yxsyclient_info_file='/opt/apps/com.superred.wlhxxyc/files/host.ini' #万里红隐写溯源域名配置文件


        suwellread_pac='cn.suwell.reader' #数科网维阅读器包名

        slclient_pac='com.eetrust.wdaq' #文档安全管理系统包名
        slclient_ver='2.0.4.1' #文档安全管理系统版本
        com_360_browser_pac='360安全浏览器' #360浏览器包名
        com_360_browser_ver='10.4.1006.26-1' #360浏览器版本
        com_qaxbrowser_pac='qaxbrowser' #奇安信浏览器包名
        com_qaxbrowser_ver='1.0.32574.3-1' #奇安信浏览器版本

        pnxclienthost_pac='pnxclienthost' #JIT控件包名
    fi
    wps_ver='11.8.2.10386' #WPS版本
    motionpro_ver='1.2.10.1' #安全网关客户端
    wlh_ver='7.0.171' #万里红隐写溯源
    pnxclienthost_pac='pnxclienthost' #JIT控件包名
    pnxclienthost_ver='3.0.1.37' #JIT控件版本号
    dns1='130.20.160.19'
    dns2='130.20.160.57'
}
data_check(){
    # 数据对比
    # $1 实际数据
    # $2 标准数据
    # $3 对比备注，例如:360浏览器
    if [[ $1 == $2 ]];then
        red_z_green_z_info "$3" "正确"
    else
        red_zt_bg "${3}:" "不正确"
    fi
}
dns_check(){
    dns1_get=$(nmcli device show | grep "$dns1")
    dns2_get=$(nmcli device show | grep "$dns2")
    if [[ -n $dns1_get ]];then
        red_z_green_z_info 'DNS配置' '正确'
        red_z_green_z_info '当前DNS' $dns1
    else
        if [[ -n $dns2_get ]];then
            red_z_green_z_info 'DNS配置' '正确'
            red_z_green_z_info '当前DNS' $dns2
        else
            red_zt_bg 'DNS配置' '不正确'
            log_files=$log_file
            log_file=''
            red_z_green_z_info '请设置以下任意一个DNS\n' "$dns1 $dns2"
            log_file=$log_files
        fi
    fi
}
wps_check(){
    status=`dpkg -l | grep wps | awk '{print $3}' | awk -F '.AK' '{print $1}'`
    if [[ -n ${status} ]];then
        red_z_green_z "WPS安装情况:" "已安装"
        red_z_green_z "当前WPS版本:" ${status}
        data_check  "$status" "$wps_ver" "WPS版本检查"
    else
        red_zt_bg "WPS安装情况:" "未安装"
    fi
}
ensure(){
    # 运维保障系统
    if [[ $os_type == 'uos' ]];then
        ver=`dpkg -l | grep updater | grep arm | awk '{print $3}'`
        if [[ -n $ver ]];then
            red_z_green_z_info '运维保障平台安装' '已安装'
            red_z_green_z_info '运维保障平台安装版本' ${ver}
            if [[ $ver == "$updater_ver" ]];then
                red_z_green_z_info '运维保障平台版本检查' '正确'
            else
                red_zt_bg '运维保障平台版本检查:' '不正确'
            fi
        else
            red_zt_bg '运维保障平台安装:' '未安装'
        fi
    else
        ver=$(dpkg -l | grep updater | grep -v inetd)
        if [[ -n $ver ]];then
            red_z_green_z_info '运维保障平台安装' '已安装'
            ver=$(echo "$ver" | awk '{print $3}')
            if [[ -n $ver ]];then
                red_z_green_z_info '运维保障平台安装版本' "$ver"
                data_check "$ver" ${updater_ver}  '运维保障平台安装版本检查'
            else
                red_zt_bg '运维保障平台版本检查:' '查询失败'
            fi
        else
            red_zt_bg '运维保障平台安装:' '未安装'
        fi
    fi
}
hellp(){
    # 取消记录文件
    log_file=''
    red_bg "\n\n\n\n插件清单标准版本参考明细："
    red_z_green_z_info '安全网关客户端' ${motionpro_ver}
    red_z_green_z_info '文档安全管理系统' ${slclient_ver}
    red_z_green_z_info '隐写溯源系统' ${wlh_ver}
    red_z_green_z_info '电子签章' ${ofdplugin_ver}
    red_z_green_z_info 'WPS版本' ${wps_ver}
    red_z_green_z_info '数科阅读器' ${suwe_ver}
    red_z_green_z_info '福昕阅读器' ${foxitofficesuite_ver}
    red_z_green_z_info '主机审计' ${topdesk_ver}
    red_z_green_z_info '数字证书(BJCA客户端)' ${certaide_ver}
    red_z_green_z_info '360安全浏览器版本(无论判断结果,全部记录版本)' ${com_360_browser_ver}
    red_z_green_z_info '奇安信可信浏览器版本(无论判断结果,全部记录版本)' ${com_qaxbrowser_ver}
    exit 0
}
wr(){
    service_check ${wlh_yxsyclient_pac} '隐写溯源系统-FM' ${wlh_ver}
    if [[ -f ${wlh_yxsyclient_ver_file} ]];then
        ver=$(grep version ${wlh_yxsyclient_ver_file} |  awk -F '=' '{print $2}')
        if [[ -n $ver ]];then
            red_z_green_z "隐写溯源系统-FM_配置版本: " "$ver"
            data_check "$ver" "171" "隐写溯源系统-FM_配置版本检查:"
        else
            red_zt_bg "隐写溯源系统-FM_配置版本: " "查询失败"
        fi
        domain=$(grep addr ${wlh_yxsyclient_info_file} | awk -F '=' '{print $2}')
        if [[ -n $domain ]];then
            red_z_green_z "隐写溯源系统-FM域名: " "$domain"
            data_check "$domain" 'http://yxjk.zhbgjcrj.gx.gov:80' "隐写溯源系统-FM域名检查:"
        else
            red_zt_bg "隐写溯源系统-FM域名: " "查询失败"
        fi
    else
        red_zt_bg "找不到文件:" "${wlh_yxsyclient_ver_file}"
    fi
}
hots_sec(){
    if [[ -z $topdesk_ver ]];then
        red_zt_bg "系统类型判断:" "失败"
    fi
    service_check 'topdesk' '主机审计系统' ${topdesk_ver}
    service_status 'TDA' 3  '主机审计系统'
}
info
if [[ ${dir} == '-h' || ${dir} == '--help' || ${dir} == 'help' ]];then
    hellp
fi
mkdir -p ./${dir}

red_z_green_z "当前目录:" $work_dir
red_z_green_z "当前系统架构:" $arch
red_z_green_z "当前系统类型:" $os_type
red_z_green_z_info '单位名称' $dir
get_sn 1
end(){
    if [[ $m == '检查结果' ]];then
        red_z_green_z "请手动修改此文件名(以主机SN命名)并移动到目录：[${dir}]" "$log_file"
    else
        cp -rf "${log_file}" "${copy_file}"
        red_z_green_z_info "文件复制: " " ${log_file}--> ${copy_file}"
    fi

    cp -rf "${log_file}" "${CP_FILE}"
    if [[ $? == 0 ]];then
        red_z_green_z_info "副本: [$log_file]保留" "成功---> [ ${CP_FILE} ]"
    else
        red_zt_bg "副本: [$log_file]保留" "失败---> [ ${CP_FILE} ]"
    fi
}
if [[ $os_type == 'uos' ]];then
    echo -e "-------------------系统版本检测--------------------"
    red_z_green_z_info '当前系统版本' "$uos_ver" 
    if [[  ${uos_ver} -ge 1032 ]];then
        red_z_green_z_info '系统版本检查' '已升级到1032或更高版本'
    else
        red_zt_bg '系统版本检查:' '版本过低,请升级系统'
    fi
fi

echo -e '-------------------------WPS------------------------'
# 已完成
wps_check


echo -e '\n----------------------数科网维---------------------'
# 已完成

service_check ${suwellread_pac} '数科网维' ${suwe_ver}

echo -e '\n----------------------福昕阅读器--------------------'
# 已完成
service_check 'foxitofficesuite' '福昕阅读器' ${foxitofficesuite_ver}


echo -e '\n----------------------360安全浏览器--------------------'
# 已完成
service_check ${com_360_browser_pac} '360安全浏览器' ${com_360_browser_ver}


echo -e '\n----------------------奇安信浏览器--------------------'
# 已完成
service_check ${com_qaxbrowser_pac} '奇安信浏览器' ${com_qaxbrowser_ver}




echo -e '\n--------------------安全网关客户端-------------------'
# 待完善
service_check 'motionpro' '安全网关客户端' ${motionpro_ver}



echo -e '\n--------------------JIT控件-------------------'

service_check ${pnxclienthost_pac} 'JIT控件'    ${pnxclienthost_ver}



echo -e '\n--------------------文档安全管理-------------------'
# 已完成
service_check ${slclient_pac}  "文档安全管理系统"  ${slclient_ver}

echo -e '\n----------------------隐写溯源系统-FM---------------------'
# 待完善
wr

echo -e '\n----------------------主机审计---------------------'
# 已完成
hots_sec

echo -e '\n----------------------电子签章---------------------'
service_check 'ofdplugin' '电子签章' ${ofdplugin_ver}
service_check 'cn.bjca.certaide' 'BJCA客户端' ${certaide_ver}


echo -e '\n----------------------运维保障平台---------------------'
ensure

echo -e '\n----------------------DNS配置检测---------------------'

dns_check
echo -e '\n----------------------结束---------------------'
end

rm -f $log_file
echo "脚本更新下载地址:" 'https://gitee.com/faith01238/tools/releases'
echo "遇到问题请联系微信:" $weixin
echo "或者直接拨打电话:" $phone